package com.ddf.springdata.jpa.service;

import com.ddf.springdata.jpa.dao.UserRepository;
import com.ddf.springdata.jpa.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @author DDf on 2018/9/27
 */
@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    @Transactional
    public User save(User user) {
        return userRepository.save(user);
    }

    /**
     * Stream潜在包装底层数据存储专用资源，因此必须在使用之后被关闭。
     * 您可以Stream使用该close()方法或使用Java 7 try-with-resources块手动关闭，如以下示例所示：
     * 而一旦被关闭，即使返回也不能继续使用，所以使用的时候需要注意，要在合适的时机关闭
     * @param date
     * @return
     */
    @Transactional(readOnly = true)
    public Stream<User> queryStream(Date date) {
        try (Stream<User> allByCreateTimeBefore = userRepository.getAllByCreateTimeBefore(date)) {
            System.out.println("getAllByCreateTimeBefore: " + allByCreateTimeBefore.collect(Collectors.toList()));
            return allByCreateTimeBefore;
        }
    }

    /**
     * 修改部分字段
     * @param username
     * @param password
     */
    @Transactional
    public void updateUserByUsername(String username, String password) {
        userRepository.updateUserByUsername(username, password);
    }
}
